package retrofit2; import okhttp3.Headers; import okhttp3.Protocol; import okhttp3.Request; import okhttp3.Response; import okhttp3.ResponseBody; public final class Response<T> { private final T body; private final ResponseBody errorBody; private final okhttp3.Response rawResponse; private Response(okhttp3.Response response, T t, ResponseBody responseBody) { this.rawResponse = response; this.body = t; this.errorBody = responseBody; } public static <T> Response<T> error(int i, ResponseBody responseBody) { if (i >= 400) { return error(responseBody, new Response.Builder().code(i).message("Response.error()").protocol(Protocol.HTTP_1_1).request(new Request.Builder().url("http://localhost/").build()).build()); } throw new IllegalArgumentException("code < 400: " + i); } public static <T> Response<T> error(ResponseBody responseBody, okhttp3.Response response) { Utils.checkNotNull(responseBody, "body == null"); Utils.checkNotNull(response, "rawResponse == null"); if (!response.isSuccessful()) { return new Response<>(response, null, responseBody); } throw new IllegalArgumentException("rawResponse should not be successful response"); } public static <T> Response<T> success(T t) { return success(t, new Response.Builder().code(200).message("OK").protocol(Protocol.HTTP_1_1).request(new Request.Builder().url("http://localhost/").build()).build()); } public static <T> Response<T> success(T t, Headers headers) { Utils.checkNotNull(headers, "headers == null"); return success(t, new Response.Builder().code(200).message("OK").protocol(Protocol.HTTP_1_1).headers(headers).request(new Request.Builder().url("http://localhost/").build()).build()); } public static <T> Response<T> success(T t, okhttp3.Response response) { Utils.checkNotNull(response, "rawResponse == null"); if (response.isSuccessful()) { return new Response<>(response, t, null); } throw new IllegalArgumentException("rawResponse must be successful response"); } public T body() { return this.body; } public int code() { return this.rawResponse.code(); } public ResponseBody errorBody() { return this.errorBody; } public Headers headers() { return this.rawResponse.headers(); } public boolean isSuccessful() { return this.rawResponse.isSuccessful(); } public String message() { return this.rawResponse.message(); } public okhttp3.Response raw() { return this.rawResponse; } public String toString() { return this.rawResponse.toString(); } }